home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / smtp_overflows.nasl < prev    next >
Text File  |  2005-03-31  |  3KB  |  115 lines

  1. #
  2. # This script was written by Michel Arboi <arboi@alussinan.org>
  3. #
  4. # GNU Public Licence
  5. #
  6.  
  7. if(description)
  8. {
  9.   script_id(11772);
  10.   script_version("$Revision: 1.3 $");
  11.  
  12.   name["english"] = "Generic SMTP overflows";
  13.   script_name(english:name["english"]);
  14.  
  15.   desc["english"] = "
  16. The remote SMTP server crashes when it is send a command 
  17. with a too long argument.
  18.  
  19. A cracker might use this flaw to kill this service or worse,
  20. execute arbitrary code on your server.
  21.     
  22. Solution : upgrade your MTA or change it.
  23.  
  24. Risk factor : High";
  25.  
  26.  
  27.   script_description(english:desc["english"]);
  28.             
  29.  
  30.   summary["english"] = "Tries overflows on SMTP commands arguments"; 
  31.   script_summary(english:summary["english"]);
  32.  
  33.   script_category(ACT_DESTRUCTIVE_ATTACK);
  34.  
  35.   script_copyright(english:"This script is Copyright (C) 2003 Michel Arboi");
  36.  
  37.   family["english"] = "SMTP problems";
  38.   family["francais"] = "ProblΦmes SMTP";
  39.   script_family(english:family["english"], francais:family["francais"]);
  40.   script_dependencie("find_service.nes", "sendmail_expn.nasl", "smtpserver_detect.nasl");
  41.   script_exclude_keys("SMTP/wrapped");
  42.   script_require_ports("Services/smtp", 25);
  43.   exit(0);
  44. }
  45.  
  46. #
  47.  
  48. include("smtp_func.inc");
  49.  
  50. port = get_kb_item("Services/smtp");
  51. if (! port) port = 25;
  52. if(! get_port_state(port)) exit(0);
  53.  
  54. soc = open_sock_tcp(port);
  55. if (! soc) exit(0);
  56. banner = smtp_recv_banner(socket:soc);
  57.  
  58. cmds = make_list(
  59.     "HELO", 
  60.     "EHLO", 
  61.     "MAIL FROM:", 
  62.     "RCPT TO:", 
  63.     "ETRN");
  64. args = make_list(
  65.     "test.nessus.org", 
  66.     "test.nessus.org", 
  67.     strcat("test@", get_host_name()),
  68.     strcat("test@[", get_host_ip(), "]"),
  69.     "test.nessus.org");
  70. n = max_index(cmds);
  71.  
  72. for (i = 0; i < n; i ++)
  73. {
  74.   ##display("cmd> ", cmds[i], "\n");
  75.   send(socket: soc, 
  76.        data: string(cmds[i], " ", 
  77.                     str_replace(string: args[i], 
  78.                                 find: "test", 
  79.                                 replace: crap(4095)),
  80.                     "\r\n"));
  81.   repeat
  82.   {
  83.     data = recv_line(socket: soc, length: 32768);
  84.     ##display("data>  ", data);
  85.   }
  86.   until (data !~ '^[0-9][0-9][0-9]-');
  87.   # A Postfix bug: it answers with two codes on an overflow
  88.   repeat
  89.   {
  90.     data2 = recv_line(socket: soc, length: 32768, timeout: 1);
  91.     ##if (data2) display("data2> ", data2);
  92.   }
  93.   until (data2 !~ '^[0-9][0-9][0-9]-');
  94.  
  95.   if (! data)
  96.   {
  97.     close(soc);
  98.     soc = open_sock_tcp(port);
  99.     if (! soc)
  100.     {
  101.       security_hole(port);
  102.       exit(0);
  103.     }
  104.     for (j = 0; j <= i; j ++)
  105.     {
  106.       send(socket: soc, data: string(cmds[i], " ", args[i], "r\n"));
  107.       data = recv_line(socket: soc, length: 32768);
  108.     }
  109.   }
  110. }
  111.  
  112. send(socket: soc, data: 'QUIT\r\n');
  113. data = recv_line(socket: soc, length: 32768);
  114. close(soc);
  115.